package com.tanhua.dubbo.server.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.GeoPointField;

@Data
@NoArgsConstructor
@AllArgsConstructor
// indexName 索引名称
// type 表名  可以省略不写  如果我们通过Java代码去创建索引 默认的表名就是类名 如果我们通过ES脚本去创建索引 默认的表名  _doc
// shards 分片数量  replicas 副本数量
// MongoDB 是一模一样的  Springdata
@Document(indexName = "tanhua", type = "user_location", shards = 6, replicas = 2)
public class UserLocation {

    // 这个ID 标记这个字段是主键
    @Id
    private Long userId; //用户id

    // 这些注解一定要手动的创建映射才会生效  putMapping
    // 如果让ES自动创建索引/映射 这些注解是不生效的
    // 使用ES 可以直接去添加文档 而不用创建索引和映射 如果没有就会自动创建索引和映射

    // GeoPointField 这种类型用来描述经纬度
    // 方便这个字段进行一个GEO的相关操作  位置相关的查询操作
    @GeoPointField  // 根据一个位置去查询附近的人
    private GeoPoint location; //lon:经度 lat:纬度

    // text  创建索引的时候  不会  一定要手动的去添加映射 putMapping (创建映射)
    // keyword  text IK
    //@Field(type = FieldType.Text,analyzer = "IK_MAX_WORD")
    @Field(type = FieldType.Keyword)
    private String address; //位置描述

    @Field(type = FieldType.Long)
    private Long created; //创建时间

    @Field(type = FieldType.Long)
    private Long updated; //更新时间

    @Field(type = FieldType.Long)
    private Long lastUpdated; //上次更新时间
}
